// 用户相关接口

const express = require("express");
const sqlQuery = require("../utils/db");

const Router = express.Router();

// 写业务
// 注册路由（接口）
/**
 * 实现注册路由的功能分析
 * 1、接收前端传递过来的用户名密码
 * 2、判断用户名密码是否为空（不允许空）
 * 3、判断用户名是否已存在
 * 4、新增用户
 * 
 * */
Router.post("/register", (req, res) => {
    // 1、获取用户名和密码
    let { userName, userPwd } = req.body;
    // console.log(userName, userPwd);
    // 2、判断用户名和密码是否为空
    if (userName && userPwd) {
        // 3、判断用户名是否已经被注册了
        sqlQuery(`select * from user where username="${userName}"`, (err, result) => {
            console.log(err);
            if (err) {
                return res.send({
                    code: 500,
                    msg: err.message
                })
            }
            // console.log(33, result); // result得到的结果是一个数组，当数组内有数据的时候表示该用户名已经被注册了
            // 4、新增用户
            if (result.length === 0) {
                // 没有被注册

                let sql = `insert into user(username,password) values("${userName}","${userPwd}")`;
                sqlQuery(sql, (err, result) => {
                    if (err) {
                        return res.send({
                            code: 500,
                            msg: err.message
                        })
                    }
                    res.send({
                        code: 200,
                        msg: "用户注册成功！"
                    })
                })
                return
            }
            // 该用户名被注册了
            res.send({
                msg: "该用户名被注册了，请求更改！",
                code: 201
            })
        })
    } else {
        res.send({
            code: 201,
            msg: "用户名和密码不能为空，请检查！"
        })
    }
})

// 登录功能
/**
 * 1、写好接口的路由
 * 2、获取前端传递过来的用户名和密码
 * 3、根据用户名和密码查询数据库数据，看是否存在这样的用户
 * 4、如果查询有这个用户：code / msg / token
 *      考虑token如何生成？要用的到一个插件生成token，jsonwebtoken
 * 
 * */
Router.post("/login", (req, res) => {
    // 2、获取用户名密码
    let { userName, userPwd } = req.body;
    // 3、根据用户名密码查询数据库中是否存在改用户，
    // 如果查询结果返回一个数组，且数组长度大于0说明该用户存，则返回登录成功
    let sql = `select * from user where username="${userName}" and password="${userPwd}"`;
    sqlQuery(sql, (err, result) => {
        if (err) {
            return res.send({
                msg: err.message,
                code: 500
            })
        }
        if (result.length > 0) {
            return res.send({
                code: 200,
                msg: "登录成功！",
                token: createToken(userName)
            })
        }
        res.send({
            code: 201,
            msg: "账号或密码错误，请检查！"
        })
    })
    // res.send("ok")
})

// 封装创建token的函数
var jwt = require('jsonwebtoken');
function createToken(username) {
    // 设置加密密码
    // sign函数中3个参数的说明
    /**
     * 第一个参数：生成token的数据（我们对用户名进行加密即可）
     * 第二个参数：加密的密码（以后解析前端传递过来的token时需要用到）
     * 第三个参数：设置token的过期时间
     * */
    let password = "heima71";
    let token = jwt.sign({
        username: username
    }, password, { expiresIn: 60 * 60 * 24 });
    // token前面必须添加"Bearer "字符串，这个字符串用在验证token需要用到的；注意：Bearer后面必须有一个空格在，
    return "Bearer " + token;
}

// 导出
module.exports = Router;
